如果git能在push的時候同時幫你做異地備份,豈不妙哉?打麻雀一砲雙響,打飛機純屬幻想。想男子漢大丈夫行不改名坐不改姓,如果要用不同名字左右開弓,這種事奉勸看官不要想,等後面git blame就會的自己多此一舉。
根據文件,重點只在於
git remote set-url --add --push origin https://gitserver/repository.git
git remote set-url --add --push origin ssh://git@gitserver:username/application.git/
git remote -v
那具體地說,該怎麼做呢?
那看看記錄,我從github增加一個gitlab
icekimo@Kris:~/Documents/KVM4e.g.$ git remote rename origin github
icekimo@Kris:~/Documents/KVM4e.g.$ git remote add gitlab git@gitlab.gis-tpe.com.tw:icekimo.chen/kvm-xml.git
icekimo@Kris:~/Documents/KVM4e.g.$ git push -u gitlab --all
The authenticity of host 'gitlab.gis-tpe.com.tw (118.163.30.44)' can't be established.
ECDSA key fingerprint is SHA256:CZ1+Y7JDlH70SAgKaUloegwh6JO+70NRjBOmm1j5sAY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.gis-tpe.com.tw,118.163.30.44' (ECDSA) to the list of known hosts.
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (18/18), 5.42 KiB | 5.42 MiB/s, done.
Total 18 (delta 9), reused 13 (delta 7)
To gitlab.gis-tpe.com.tw:icekimo.chen/kvm-xml.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'gitlab'.
icekimo@Kris:~/Documents/KVM4e.g.$ git push -u gitlab --tags
Everything up-to-date
icekimo@Kris:~/Documents/KVM4e.g.$
有圖為證,github
同樣資料複製到gitlab
那麼設定檔長怎樣?
icekimo@Kris:~/Documents/KVM4e.g.$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "github"]
url = git@github.com:August-Icekimo/KVM4e.g..git
fetch = +refs/heads/*:refs/remotes/github/*
[branch "master"]
remote = gitlab
merge = refs/heads/master
[remote "gitlab"]
url = git@gitlab.gis-tpe.com.tw:icekimo.chen/kvm-xml.git
fetch = +refs/heads/*:refs/remotes/gitlab/*
但是這樣我們不滿足
我們無三不成禮,三人行必有我師焉,所以一定要變成三個 ,最重要的是不付錢
猜猜看下面這段要做什麼?
useradd git -d /home/git -m -s `which git-shell`
mkdir -p /srv/git/KVM-xml.git
chown -R git:git /srv/git
cd /srv/git/KVM-xml.git && sudo -u git git --bare init
是七傷拳
歐,不是,是在本地建立一個git repo
為什麼要這樣做,是為了湊github、gitlab與gitolite的小宇宙在一點嗎?
因為我要路由器Bosley成就南方四賤客裡面千真之劍的梗,不懂的可以從這裡出去不要回來。
但是技術上的難點就是,嵌入式裝置的dropbear ssh真的是太可怕的豬隊友了。
所以山不轉路轉,只需要很簡單的用rsync就弄好同步備份了啊?
icekimo@Kelly:/media/icekimo/0912682827/C7V5ROM/targets/ar71xx/generic$ scp -r packages/* icekimo@Bosley:/srv/ipk/ && ssj Bosley # 把程式包移到Bosley
icekimo@Bosley:~$ cd /srv/ipk/ && sudo opkg install linpopt* rsync*
然後我們來看看rsync表現如何
icekimo@Bosley:~$ rsync -art --progress --delete-after icekimo@kris:/srv/git /srv
receiving file list ... 70 files to consider
git/
git/KVM-XML.git/
git/KVM-XML.git/HEAD
23 100% 22.46kB/s 0:00:00 (xfr#1, to-chk=67/70)
git/KVM-XML.git/config
66 100% 64.45kB/s 0:00:00 (xfr#2, to-chk=66/70)
git/KVM-XML.git/description
73 100% 23.76kB/s 0:00:00 (xfr#3, to-chk=65/70)
git/KVM-XML.git/branches/
git/KVM-XML.git/hooks/
git/KVM-XML.git/hooks/applypatch-msg.sample
478 100% 116.70kB/s 0:00:00 (xfr#4, to-chk=62/70)
git/KVM-XML.git/hooks/commit-msg.sample
896 100% 145.83kB/s 0:00:00 (xfr#5, to-chk=61/70)
git/KVM-XML.git/hooks/fsmonitor-watchman.sample
3,327 100% 249.92kB/s 0:00:00 (xfr#6, to-chk=60/70)
git/KVM-XML.git/hooks/post-update.sample
189 100% 11.54kB/s 0:00:00 (xfr#7, to-chk=59/70)
git/KVM-XML.git/hooks/pre-applypatch.sample
424 100% 18.00kB/s 0:00:00 (xfr#8, to-chk=58/70)
git/KVM-XML.git/hooks/pre-commit.sample
1,642 100% 61.67kB/s 0:00:00 (xfr#9, to-chk=57/70)
git/KVM-XML.git/hooks/pre-push.sample
1,348 100% 47.01kB/s 0:00:00 (xfr#10, to-chk=56/70)
git/KVM-XML.git/hooks/pre-rebase.sample
4,898 100% 154.30kB/s 0:00:00 (xfr#11, to-chk=55/70)
git/KVM-XML.git/hooks/pre-receive.sample
544 100% 16.10kB/s 0:00:00 (xfr#12, to-chk=54/70)
git/KVM-XML.git/hooks/prepare-commit-msg.sample
1,492 100% 41.63kB/s 0:00:00 (xfr#13, to-chk=53/70)
git/KVM-XML.git/hooks/update.sample
3,610 100% 92.77kB/s 0:00:00 (xfr#14, to-chk=52/70)
git/KVM-XML.git/info/
git/KVM-XML.git/info/exclude
240 100% 5.86kB/s 0:00:00 (xfr#15, to-chk=50/70)
git/KVM-XML.git/objects/
git/KVM-XML.git/objects/02/
git/KVM-XML.git/objects/02/97834f6b8959089005308a174104098b3c7abd
160 100% 3.63kB/s 0:00:00 (xfr#16, to-chk=47/70)
git/KVM-XML.git/objects/03/
git/KVM-XML.git/objects/03/0f42ef85c4a8455a3c94660799cd450b9c84df
1,849 100% 39.25kB/s 0:00:00 (xfr#17, to-chk=45/70)
git/KVM-XML.git/objects/0f/
git/KVM-XML.git/objects/0f/cd3384e0129bd060c8c178622021e525b17541
163 100% 3.25kB/s 0:00:00 (xfr#18, to-chk=43/70)
git/KVM-XML.git/objects/1c/
git/KVM-XML.git/objects/1c/b58df879d50c272927ff1a81222abe9ceac169
1,451 100% 26.74kB/s 0:00:00 (xfr#19, to-chk=41/70)
git/KVM-XML.git/objects/1d/
git/KVM-XML.git/objects/1d/eb6d55b64120dc7a3165498f32219a73a99c9b
136 100% 2.37kB/s 0:00:00 (xfr#20, to-chk=39/70)
git/KVM-XML.git/objects/69/
git/KVM-XML.git/objects/69/01e1aa3d6f9d3d395885da837f519f67d5d965
160 100% 2.65kB/s 0:00:00 (xfr#21, to-chk=37/70)
git/KVM-XML.git/objects/69/867eb7c7ffc1a0f7e415cdd407c93518904531
103 100% 1.65kB/s 0:00:00 (xfr#22, to-chk=36/70)
git/KVM-XML.git/objects/8e/
git/KVM-XML.git/objects/8e/0da2403a3222989de0518cd66f77bd5788f2e7
198 100% 3.02kB/s 0:00:00 (xfr#23, to-chk=34/70)
git/KVM-XML.git/objects/97/
git/KVM-XML.git/objects/97/ad0b0be6ab1f07ae43f79d2f6e512f6383a590
228 100% 3.32kB/s 0:00:00 (xfr#24, to-chk=32/70)
git/KVM-XML.git/objects/98/
git/KVM-XML.git/objects/98/47a9d00922adf047d5919665184c22c5e2315a
1,149 100% 16.03kB/s 0:00:00 (xfr#25, to-chk=30/70)
git/KVM-XML.git/objects/a1/
git/KVM-XML.git/objects/a1/7ac0c4c1eac726d5d84f1607318d84deec6f35
1,525 100% 20.68kB/s 0:00:00 (xfr#26, to-chk=28/70)
git/KVM-XML.git/objects/a5/
git/KVM-XML.git/objects/a5/7cc0f5a175900fa28c0123e23a52f59681f5d3
228 100% 2.97kB/s 0:00:00 (xfr#27, to-chk=26/70)
git/KVM-XML.git/objects/a6/
git/KVM-XML.git/objects/a6/daef74b9a64c6e5a4a661e1cea2da36462eafd
1,089 100% 13.81kB/s 0:00:00 (xfr#28, to-chk=24/70)
git/KVM-XML.git/objects/bd/
git/KVM-XML.git/objects/bd/1a4084b2e6923541dcc04b7fb2239528a1f4fd
177 100% 2.16kB/s 0:00:00 (xfr#29, to-chk=22/70)
git/KVM-XML.git/objects/c4/
git/KVM-XML.git/objects/c4/073c2e97bf6d7718ecbaed9bdc71e045f2ef28
200 100% 2.35kB/s 0:00:00 (xfr#30, to-chk=20/70)
git/KVM-XML.git/objects/f9/
git/KVM-XML.git/objects/f9/9c6522e23526496b6131a9aaa3a2faee58c2af
179 100% 2.06kB/s 0:00:00 (xfr#31, to-chk=18/70)
git/KVM-XML.git/objects/fc/
git/KVM-XML.git/objects/fc/1d0c4c7345a071d89279152d2cea4bfbab8111
1,707 100% 18.94kB/s 0:00:00 (xfr#32, to-chk=16/70)
git/KVM-XML.git/objects/fe/
git/KVM-XML.git/objects/fe/d01756b8f9f2ce4eca6018599697d7975faf8e
142 100% 1.52kB/s 0:00:00 (xfr#33, to-chk=14/70)
git/KVM-XML.git/objects/info/
git/KVM-XML.git/objects/pack/
git/KVM-XML.git/refs/
git/KVM-XML.git/refs/heads/
git/KVM-XML.git/refs/heads/master
41 100% 0.43kB/s 0:00:00 (xfr#34, to-chk=9/70)
git/KVM-XML.git/refs/remotes/
git/KVM-XML.git/refs/remotes/Kris/
git/KVM-XML.git/refs/remotes/Kris/master
41 100% 0.41kB/s 0:00:00 (xfr#35, to-chk=6/70)
git/KVM-XML.git/refs/remotes/github/
git/KVM-XML.git/refs/remotes/github/HEAD
41 100% 0.40kB/s 0:00:00 (xfr#36, to-chk=4/70)
git/KVM-XML.git/refs/remotes/github/master
41 100% 0.39kB/s 0:00:00 (xfr#37, to-chk=3/70)
git/KVM-XML.git/refs/remotes/gitlab/
git/KVM-XML.git/refs/remotes/gitlab/master
41 100% 0.38kB/s 0:00:00 (xfr#38, to-chk=1/70)
git/KVM-XML.git/refs/tags/
0 files...
icekimo@Bosley:~$
是真的,就這樣而已
最後補充說明,如果要處理像虛擬機的磁碟映象檔備份,分成兩種類型
一種是像前面黑群暉介紹的loader的數位檔案,如果可以要先在.gitignore避開這類檔案
然後連結過去另一個目錄(耗用一個inode),在那裡改用git lfs管理,連美工.psd .ai .indd都可以考慮這樣
git lfs push --all https://github.com/user/new-repository.git
而剩下的就是超大硬碟檔,那個qemu-image本身就支援snapshot,所以就不用這樣辛苦。
到這裡的git奇巧淫技,是不是有讓維運團隊腦袋開始覺得
參考:
https://www.git-tower.com/learn/git/ebook/en/command-line/advanced-topics/git-lfs#start